package com.qfjy.homework.tanzhizhong;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    /**
     * 表示目标代理对象
     */
    private Object target;


    /**
     * 构造方法传入一个对象表示被代理的对象
     * @param target
     */
    public ProxyUtil(Object target){
        this.target= target;
    }

    /**
     * 获得代理对象的方法
     */

    public Object getProxyInstance(){
        /**
         * 类加载器
         */
        ClassLoader classLoader = this.target.getClass().getClassLoader();
        /**
         * 目标代理对象实现的接口
         */
        Class<?>[] interfaces = this.target.getClass().getInterfaces();

        /**
         * 第三个参数是InvocationHandler,是个接口,用匿名内部类形式作为参数
         */


        return Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                return method.invoke(target,args);
            }
        });
    }


}
